﻿#include <string>
#include <vector>
#include <boost\lexical_cast.hpp>
#include "Exception.h"
#pragma once

namespace BB
{
	// 일반적인 사람을 지칭하는 클래스로 이 BBHuman 클래스를
	// Base 로 해서 BBPlayer 라던지, BBCoach, BBManager 등을
	// 관리할 수 있게 된다. 

	class BBHuman
	{
		std::string _name;
		int _id; // 고유 식별 id
		int _age;

	public:
		BBHuman(std::string name, int id, int age) : _name(name), _id(id), _age(age) {}

		// 생성자 일일히 맞춰줄 필요 없이 간단하게 string vector 를 받아서 각각의 인자들을 전달한다.
		BBHuman(std::vector<std::string>::iterator data_list)
		{
			// data_list 에서의 순서는 Human 클래스의 인자 정의 순서와 일치한다.
			_name = *data_list;
			try 
			{
				data_list ++;
				_id = boost::lexical_cast<int>(*data_list);
				data_list ++;
				_age = boost::lexical_cast<int>(*data_list);
			}
			catch(boost::bad_lexical_cast &)
			{
				throw Exception(Exception::BAD_LEXICAL_CAST_CTOR);
			}
		}

		std::string name() { return _name; }
		int id() { return _id; }
		int age() { return _age; }
		void inc_age() { _age ++; }
	};
}